package main

import (
	"fmt"
	"reflect"
)

// 利用一个函数，来测试 interface{} 的反射机制，函数的参数定义为空接口
func testReflect(i interface{}) {
	// 通过反射获取传入的变量的 type, kind, 值
	// 1. 先获取到 reflect.Type
	rTyp := reflect.TypeOf(i)
	fmt.Println("rType=", rTyp)

	// 2. 获取到 reflect.Value
	rVal := reflect.ValueOf(i)
	fmt.Println("rVal=", rVal)

	// 获取变量的类别
	kind1 := rTyp.Kind()
	fmt.Println("kind1=", kind1)

	kind2 := rVal.Kind()
	fmt.Println("kind2=", kind2)
}

// 定义学生结构体
type Student struct {
	Name string
	Age  int
}

func main() {
	//第十四章 反射

	// 定义一个student实例
	stu := Student{
		Name: "tom",
		Age:  20,
	}

	// 调用 testReflect 函数，传入 num
	testReflect(stu)
}
